package com.psychologyCommunity.Community.Contoller;

import com.psychologyCommunity.Community.entity.DiscussPost;
import com.psychologyCommunity.Community.entity.Page;
import com.psychologyCommunity.Community.entity.User;
import com.psychologyCommunity.Community.service.DiscussPostService;
import com.psychologyCommunity.Community.service.LikeService;
import com.psychologyCommunity.Community.service.UserService;
import com.psychologyCommunity.Community.util.CommunityConstance;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
//@RequestMapping("/home")
public class HomeController implements CommunityConstance {
    //controller 依赖service层
    @Autowired
    private DiscussPostService discussPostService;

    @Autowired
    private UserService userService;

    @Autowired
    private LikeService likeService;
//    @Test
//  这个查询访问的是网页，所以  @ResponseBody 就可以省略了

    @RequestMapping(path = "/index",method = RequestMethod.GET)
    public String getIndexPage(Model model , Page page,
    @RequestParam(name="orderMode",defaultValue = "0") int orderMode){ //分页的时候可以传入page 做一个封装
        //方法调用前，springMVC会自动实例化Model 和Page ，并将Page 注入Model
        //所以再thymeleaf 中可以直接访问 Page对象中的数据

        //处理要查询的数据
        page.setRows(discussPostService.findPostRows(0));//因为是首页 用户id就传0  查询所有的
        //oderMode 是从路径上的？传过来的，因为不是post 请求体
        page.setPath("/index?orderMode="+orderMode);//当前的访问路径 肯定是一直否刷新这个页面
        //处理请求的逻辑  --之前是写死了 现在加了分页之后  可以直接从页面拿
//        List<DiscussPost> listPost = discussPostService.findDiscussPost(0, 0, 10);//查询全部人的帖子
        List<DiscussPost> listPost =
                discussPostService.findDiscussPost(0, page.getSetOff(), 10,orderMode);//查询全部人的帖子
        //为了得到用户名 ，我可以直接用户表查用户名，但是考虑到之后的对于用户信息的利用 干脆把帖子和用户信息都拼接起来放在List中
        //总体的想法就是通过 得到的帖子集合中的每个帖子的userid 通过这个userid去用户表里面得到完整的用户信息 给他拼到一个map
        //就得到了一个 有n个帖子 就有n个map的list集合
        List<Map<String,Object>> discussPosts=new ArrayList<Map<String,Object>>();
        //要记得加上 当list不为空的时候才进行遍历put
        if(discussPosts!=null){
            for (DiscussPost post : listPost) { //循环遍历这个集合中的帖子
                Map<String,Object> mapPostUser=new HashMap<String,Object>();
                mapPostUser.put("post",post);//先把帖子放到一个map中

                int user_id = post.getUserid();//通过当前帖子拿到所属的用户的id
                User user = userService.findUserById(user_id);
                mapPostUser.put("user",user);//再把拿到的用户信息 也放到同一个map

                long likeCount=likeService.findEntityLikeCount(ENTITY_TYPE_POST, post.getId());
                mapPostUser.put("likeCount",likeCount);


                //最后记得把map 要加到list中 要不然什么都没有
                discussPosts.add(mapPostUser);
            }
        }
        model.addAttribute("discussPostUserInfo",discussPosts);//要记得把这个集合加到model
        model.addAttribute("page",page);
        model.addAttribute("orderMode",orderMode);
        return "/index";//返回的是templates下的index页面
    }

    //因为之后可能会对错误页面进行一个处理请求 ，二也是为了复用
    @RequestMapping(path = "/error",method = RequestMethod.GET)
    public  String  getErrorPage(){
        return "/error/500";
    }

    //拒绝访问时的提示页面
    @RequestMapping(path = "/denied",method = RequestMethod.GET)
    public String getDeniedPage(){
        return "/error/404";
    }

}
